/**
 * # 参数列表实体类:
 *  List - 数据操作日志列表
 * 
 * # 描述:
 *  查询和显示数据操作日志列表。
 *  
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

package com.waln.log.mop.args;

/**
 * 功能 数据操作日志列表 的参数列表。
 */
@pittypat.FunctionAnnotation(transaction = false)
public final class List extends pittypat.FunctionArgs {
	/**
	 * 页码。
	 */
	@pittypat.ParameterAnnotation(position = 0, role = pittypat.ParameterRole.PAGE_INDEX)
	public Long pageIndex;

	/**
	 * 页面尺寸。
	 */
	@pittypat.ParameterAnnotation(position = 1, role = pittypat.ParameterRole.PAGE_SIZE)
	public Long pageSize;

	/**
	 * 总行数。
	 */
	@pittypat.ParameterAnnotation(position = 2, direction = pittypat.ParameterDirection.OUT, role = pittypat.ParameterRole.TOTAL_ROWS)
	public Long totalRows;

	/**
	 * 排序名称。
	 */
	@pittypat.ParameterAnnotation(position = 3, role = pittypat.ParameterRole.ORDER_NAME, maxLength = 30)
	public String orderName;

	/**
	 * 排序方向。
	 */
	@pittypat.ParameterAnnotation(position = 4, role = pittypat.ParameterRole.ORDER_DIRECTION, maxLength = 4)
	public String orderDirection;

	/**
	 * 管理员用户 Id。
	 * <p>
	 * 当前作为系统管理员的用户的 Id，由系统自动设置该参数。
	 */
	@pittypat.ParameterAnnotation(position = 5, role = pittypat.ParameterRole.USER_ID)
	public java.util.UUID administratorId;

	/**
	 * 用户名。
	 * <p>
	 * 进行数据操作的目标用户的用户名。
	 */
	@pittypat.ParameterAnnotation(position = 6, maxLength = 50)
	public String userName;

	/**
	 * 操作类型代码。
	 * <p>
	 * 操作的类型代码：1-查询、2-添加、4-更新、8-删除、16-其他。
	 */
	@pittypat.ParameterAnnotation(position = 7)
	public Byte opType;

	/**
	 * 起始操作时间。
	 * <p>
	 * 用户进行数据操作的时间。
	 */
	@pittypat.ParameterAnnotation(position = 8)
	public java.time.LocalDateTime timeFrom;

	/**
	 * 截至时间。
	 * <p>
	 * 用户进行数据操作的时间。
	 */
	@pittypat.ParameterAnnotation(position = 9)
	public java.time.LocalDateTime timeTo;

	/**
	 * 数据库表名称。
	 * <p>
	 * 所操作的目标数据库表的名称，多个之间使用 ',' 分隔。
	 */
	@pittypat.ParameterAnnotation(position = 10, maxLength = 200)
	public String tableNames;

	/**
	 * 存储过程名称。
	 * <p>
	 * 执行操作的存储过程或函数的名称。
	 */
	@pittypat.ParameterAnnotation(position = 11, maxLength = 128)
	public String procName;

	/**
	 * 是否成功。
	 * <p>
	 * 指示操作是否已经成功。
	 */
	@pittypat.ParameterAnnotation(position = 12)
	public Boolean success;

	/**
	 * 操作消息列表。
	 * <p>
	 * 符合条件的日志消息列表。
	 */
	@pittypat.ParameterAnnotation(position = 13, direction = pittypat.ParameterDirection.OUT)
	public pittypat.DataList<com.waln.log.mop.data.OpMessage> messages;

	/**
	 * 初始化 List 类的一个新实例。
	 */
	public List() {
		super();

		// 页码
		this.pageIndex = null;
		// 页面尺寸
		this.pageSize = null;
		// 总行数
		this.totalRows = null;
		// 排序名称
		this.orderName = null;
		// 排序方向
		this.orderDirection = null;
		// 管理员用户 Id
		this.administratorId = null;
		// 用户名
		this.userName = null;
		// 操作类型代码
		this.opType = null;
		// 起始操作时间
		this.timeFrom = null;
		// 截至时间
		this.timeTo = null;
		// 数据库表名称
		this.tableNames = null;
		// 存储过程名称
		this.procName = null;
		// 是否成功
		this.success = null;
		// 操作消息列表
		this.messages = null;
	}

	/**
	 * 获取指定名称的参数值。
	 * 
	 * @param name
	 * 			参数名称，不区分大小写。
	 * @return 指定名称的参数值。
	 */
	@Override
	public Object getParameterValue(String name) {
		if (name == null || name.length() == 0) {
			return null;
		}

		switch (name.toLowerCase()) {
			case "pageindex":
				return this.pageIndex;
			case "pagesize":
				return this.pageSize;
			case "totalrows":
				return this.totalRows;
			case "ordername":
				return this.orderName;
			case "orderdirection":
				return this.orderDirection;
			case "administratorid":
				return this.administratorId;
			case "username":
				return this.userName;
			case "optype":
				return this.opType;
			case "timefrom":
				return this.timeFrom;
			case "timeto":
				return this.timeTo;
			case "tablenames":
				return this.tableNames;
			case "procname":
				return this.procName;
			case "success":
				return this.success;
			case "messages":
				return this.messages;
			default:
				return null;
		}
	}

	/**
	 * 设置指定名称的参数值。
	 * 
	 * @param name
	 * 			参数名称，不区分大小写。
	 * @param value
	 * 			参数值。
	 * 
	 * @throws IllegalArgumentException
	 */
	@SuppressWarnings("unchecked")
	@Override
	public void setParameterValue(String name, Object value) throws IllegalArgumentException {
		if (name == null || name.length() == 0) {
			throw new IllegalArgumentException("没有提供有效的参数名称。");
		}

		switch (name.toLowerCase()) {
			case "pageindex":
				this.pageIndex = (Long) value;
				break;
			case "pagesize":
				this.pageSize = (Long) value;
				break;
			case "totalrows":
				this.totalRows = (Long) value;
				break;
			case "ordername":
				this.orderName = (String) value;
				break;
			case "orderdirection":
				this.orderDirection = (String) value;
				break;
			case "administratorid":
				this.administratorId = (java.util.UUID) value;
				break;
			case "username":
				this.userName = (String) value;
				break;
			case "optype":
				this.opType = (Byte) value;
				break;
			case "timefrom":
				this.timeFrom = (java.time.LocalDateTime) value;
				break;
			case "timeto":
				this.timeTo = (java.time.LocalDateTime) value;
				break;
			case "tablenames":
				this.tableNames = (String) value;
				break;
			case "procname":
				this.procName = (String) value;
				break;
			case "success":
				this.success = (Boolean) value;
				break;
			case "messages":
				this.messages = (pittypat.DataList<com.waln.log.mop.data.OpMessage>) value;
				break;
			default:
				throw new IllegalArgumentException(name + " 不是 " + this.getClass().getName() + " 的有效参数属性名称。");
		}
	}

	/**
	 * 将当前对象作为 JSON 字符串写入指定的文本流。
	 * 
	 * @param writer
	 * 			目标文本流。
	 * 
	 * @throws IllegalArgumentException
	 * @throws java.io.IOException
	 */
	@Override
	public void write(java.io.Writer writer) throws IllegalArgumentException, java.io.IOException {
		if (writer == null) {
			throw new IllegalArgumentException("writer 为 null。");
		}

		writer.write('{');

		// 页码
		writer.write("\"pageIndex\":");
		pittypat.Json.write(writer, this.pageIndex);
		writer.write(',');

		// 页面尺寸
		writer.write("\"pageSize\":");
		pittypat.Json.write(writer, this.pageSize);
		writer.write(',');

		// 总行数
		writer.write("\"totalRows\":");
		pittypat.Json.write(writer, this.totalRows);
		writer.write(',');

		// 排序名称
		writer.write("\"orderName\":");
		pittypat.Json.write(writer, this.orderName);
		writer.write(',');

		// 排序方向
		writer.write("\"orderDirection\":");
		pittypat.Json.write(writer, this.orderDirection);
		writer.write(',');

		// 管理员用户 Id
		writer.write("\"administratorId\":");
		pittypat.Json.write(writer, this.administratorId);
		writer.write(',');

		// 用户名
		writer.write("\"userName\":");
		pittypat.Json.write(writer, this.userName);
		writer.write(',');

		// 操作类型代码
		writer.write("\"opType\":");
		pittypat.Json.write(writer, this.opType);
		writer.write(',');

		// 起始操作时间
		writer.write("\"timeFrom\":");
		pittypat.Json.write(writer, this.timeFrom);
		writer.write(',');

		// 截至时间
		writer.write("\"timeTo\":");
		pittypat.Json.write(writer, this.timeTo);
		writer.write(',');

		// 数据库表名称
		writer.write("\"tableNames\":");
		pittypat.Json.write(writer, this.tableNames);
		writer.write(',');

		// 存储过程名称
		writer.write("\"procName\":");
		pittypat.Json.write(writer, this.procName);
		writer.write(',');

		// 是否成功
		writer.write("\"success\":");
		pittypat.Json.write(writer, this.success);
		writer.write(',');

		// 操作消息列表
		writer.write("\"messages\":");
		pittypat.Json.write(writer, this.messages);

		writer.write('}');
	}
}
